# -*- coding: UTF-8 -*-
'''
@Project: PytestAutoApi-master
@File: conftest.py
@Author: Charles.XC
@Date: 2025/1/23 16:35
@功能描述：
'''

import pytest
import time
import allure
import platform
from selenium import webdriver

from common.setting import ensure_path_sep
from utils import GetYamlData
from utils.read_files_tools.basic_page import BasicPage
#下面的是UI自动化的配置信息

def get_drvier(is_debug=False):
    global driver
    # 判断系统是否是linux如果是就返回true
    ishandless = True if platform.system() == 'Linux' else False
    option = webdriver.ChromeOptions()
    # 服务器使用或者远程调试 本地调试时is_debug改为 True
    if is_debug or ishandless:
        option.add_argument('--headless')
        option.add_argument('--no-sandbox')
        option.add_argument('--disable-gpu')
        option.add_argument('--disable-dev-shm-usage')
        option.add_argument('--hide-scrollbars')
        option.add_argument('--window-size=1920,1080')
        option.add_argument('--disable-blink-features=AutomationControlled')
        option.add_experimental_option('useAutomationExtension', False)
        option.add_experimental_option('excludeSwitches', ['enable-automation'])
        # command_executor 自己的 selenium grid 地址
        driver = webdriver.Remote(command_executor='http://127.0.0.1:5444/wd/hub', options=option)
        driver.implicitly_wait(GetYamlData(ensure_path_sep("\\common\\config.yaml")).get_yaml_data().get("ALL_TIMEOUT"))
    # 本地调试使用
    else:
        # driver_path = 'D:\python_project\PytestAutoApi-master\driver_home'
        # driver = webdriver.Chrome(executable_path=driver_path, options=option)
        driver = webdriver.Chrome()
        driver.maximize_window()
    return driver

# 类级别登录测试夹具
@pytest.fixture(scope='class')
def login_class():
    _driver = get_drvier()
    # 封装自己的登录逻辑
    yield _driver
    driver.quit()


# 方法级别登录测试夹具
@pytest.fixture()
def login_fixture():
    _driver = get_drvier()
    # 封装自己的登录逻辑
    yield _driver
    BasicPage(driver).set_image_success()
    driver.quit()



@pytest.fixture()
def img():
    # 绑定在测试用例上会自动截图
    # 如果登录是fixture就不用使用这个装饰器，如果是 class 级别的登录装饰器需要在测试类上绑定次方法
    yield None
    BasicPage(driver).set_image_success()

@pytest.fixture()
def output():
    print(123)
